home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / prolog / ai.prl / opnprlg1.hqx / Open Prolog / Documents / Open Prolog Info < prev    next >
Text File  |  1993-04-15  |  25KB  |  578 lines

  1. ╫ Welcome to 'Open Prolog'.
  2.  
  3. This information refers to version 1.0d42.
  4.  
  5. Open Prolog is an implementation of Edinburgh-syntax Prolog.
  6. The Edinburgh syntax is the de-facto standard Prolog syntax, and is the basis for the forthcoming ISO Prolog.
  7.  
  8. If you are an absolute beginner in Open Prolog, it's probably better for you to go through the tutorial session in 'Getting Started' in the 'Beginners - look in here' folder. Then, by all means, read this document carefully, especially the section on workarounds at the end.
  9.  
  10. This is a development version of the software, so it has bugs.
  11. Save your work often.
  12.  
  13. Changes from previous versions are listed in the file 'Revision History'.
  14.  
  15.  
  16. ╫ Introduction
  17.  
  18. Open Prolog is an implementation of Edinburgh-syntax Prolog.
  19.  
  20. For information on Prolog itself, refer to one of the standard textbooks,
  21. for instance 'Programming in Prolog' by Clocksin & Mellish,
  22. 'Introduction to Logic Programming' by Christopher Hogger, or the
  23. excellent 'Artificial Intelligence through Prolog' by Neil C. Rowe.
  24.  
  25. Open Prolog supports most of the features of DEC Prolog or C-Prolog,
  26. including Definite Clause Grammars.
  27. The 'logical' assert and retract semantics of Lindholm & O'Keefe are
  28. implemented.
  29. Effective from 1.0d36, Open Prolog supports disjunctive calls, negation,
  30. if-then and if-then-else according (we believe) to the draft ISO Prolog
  31. standards. In particular, the handling of cuts complies with that specified
  32. in the Draft.
  33. Effective from 1.0d37, Open Prolog supports program-originated
  34. catch-and-throw exception handling. 
  35.  
  36. Real-number arithmetic and internal database predicates are not supported.
  37.  
  38. Last Call Optimisation (often called Tail Recursion Optimisation) is done,
  39. and indexing on the first argument of clause heads is performed,
  40. mainly to detect determinacy so as to improve memory utilisation.
  41.  
  42. Open Prolog is called 'Open' because 'external' predicates can be dropped into
  43. it via a Hypercard-like External Predicate Interface.
  44.  
  45. Open Prolog is not copy protected. 
  46.  
  47.  
  48. ╫ System & Memory Requirements
  49.  
  50. Open Prolog runs in machines having System 6 or later system software.
  51. It is System 7 compatible, and supports 'required' AppleEvents.
  52. Effective from 1.0d38, Open Prolog is 32-bit clean.
  53.  
  54. Open Prolog will run in a memory allocation of
  55. 650K bytes or a bit less. 1024K bytes is recommended.
  56.  
  57. Most of the programs you might use or write while you are learning Prolog won't require more than 1024K (1 M byte). If they run out of memory, it's usually due to a programming error. Some large programs do, however, require lots of memory.
  58. Open Prolog has run well in a 16 MB partition (on a Quadra with 20MB RAM, running in 32-bit mode). For your information, it also runs, slowly, in a 48MB partition in the same machine with 80MB virtual memory.
  59.  
  60. At the other end of the memory scale, Open Prolog will run comfortably under System 6 on a 1MB machine with Multifinder off. If you can't start up in a 1MB machine with Multifinder off, check that you haven't got too big a cache set (64k should be adequate), and/or too many Startup (INIT) Documents.
  61.  
  62. All memory management and garbage collection is automatic.
  63. No divination of stack size or other nonsense is necessary
  64. (or possible) - it's done automatically.
  65. The name table is not garbage-collected, so it's possible to overflow it.
  66.  
  67. Open Prolog is capable of running in the Multifinder/System 7 background
  68. on long computations.
  69.  
  70. For your information, the development environment is a Mac IIx with 8MB Ram.
  71. Testing is also done on a Mac Plus with 4MB Ram, a Quadra 700 with 20MB Ram, and a PowerBook 140 with 8MB Ram. Systems are 6.0.8 & 7.1.
  72.  
  73.  
  74. ╫ Speed
  75.  
  76. Open Prolog runs the naive reverse benchmark at about 1900 Lips
  77. on a Macintosh Plus. On a Quadra 950, it runs at just under 50 KLips.
  78. It has not been 'tweaked' to perform particularly well on benchmarks.
  79.  
  80. ╫ About Open Prolog╔
  81.  
  82. The 'About Open Prolog╔' box contains a stacks indicator which
  83. shows memory space broken into
  84. Name (atom & functor), Code, Global, Local & Trail spaces.
  85.  
  86. It's possible to watch the stacks grow and contract as the program runs,
  87. but keeping the stacks indicator up-to-date slows execution quite a bit!
  88. To avoid the speed penalty, it's possible to open and close the box while
  89. the interpreter is running.
  90. Alternatively, hiding the stacks indicator fully is just as effective.
  91.  
  92. On the 'About Open Prolog╔' box, you can see how much RAM has been
  93. allocated to Open Prolog. This will be up to a maximum of what was asked
  94. for, but may be much less if there isn't enough memory in the machine.
  95.  
  96.  
  97. ╫ Installing Open Prolog
  98.  
  99. Open Prolog can be run from floppy, hard disk, or file server.
  100. It may be in a locked or read-only volume. It requires no special installation. (Previous versions needed the file Syserrs.Err in the System Folder to provide
  101. error information, but this requirement has been removed. Remove Syserrs.Err
  102. if you no longer need it for other applications.)
  103.  
  104. ╫ Using Open Prolog
  105.  
  106. Open Prolog is a text-oriented Prolog. If you have used DEC Prolog or
  107. C-Prolog, then the style of use of Open Prolog is quite similar.
  108.  
  109. To try to take advantage of Macintosh's great user interface, Open Prolog's user interface is window-oriented rather than line-oriented. To accomplish this effectively, there are a few differences between Open Prolog's interface and, say, C-Prolog's. In particular, the (line oriented) prompts of C-Prolog are moved to the status bar, and you make use of the ENTER key to enter commands and information.
  110.  
  111. If you haven't done so already, you should go through the beginners tutorial in 'Getting Started'. 
  112.  
  113. ╫ Startup
  114.  
  115. In the standard Macintosh way, you can start Open Prolog
  116. either by opening some of its documents or by opening the application itself.
  117.  
  118. í Home Folder
  119. A 'Home Folder' is chosen automatically as follows:
  120. If you start Open Prolog by opening some of its documents, then the
  121. folder the documents are in becomes the Home Folder.
  122. If you start Open Prolog by opening it directly, then the folder it's in
  123. becomes the Home Folder.
  124. You can make any folder the Home Folder by saving the Worksheet
  125. into it. See the section on File Naming for the significance of the
  126. Home Folder.
  127.  
  128. í Startup Folder
  129. The Startup Folder is the folder Open Prolog is in when it is launched.
  130.  
  131. í Startup Actions
  132. Before opening any files that you may have selected on the desktop,
  133. Open Prolog will open a Worksheet in the home folder, always called
  134. 'Open Prolog Worksheet'.
  135.  
  136. Open Prolog does a few other things at startup:
  137. It looks in the startup folder for a file called 'Open Prolog Options',
  138. and if it exists, it is consulted.
  139.  
  140. It looks in the home folder for a file called 'Open Prolog Startup' and if
  141. it exists, it is consulted.
  142.  
  143. These files can be used to do routine things at startup, if desired.
  144. Open Prolog Options should contain generally useful stuff, whereas
  145. Open Prolog Startup, being specific to a folder, can contain more specialised
  146. startup stuff.
  147.  
  148. For example, in this distribution of Open Prolog, a clause in
  149. the Open Prolog Startup file displays an alert message in a box notifying you about the 'Getting Started' document.
  150. So, if this folder happens to be the Home Folder, then the Open Prolog Startup
  151. file will be consulted, and you'll get the alert message.
  152.  
  153. Once the startup phase is finished, you are free to edit these files in the
  154. normal way - there's nothing special about them.
  155.  
  156. Note that (effective from 1.0d25) while Open Prolog Options is being
  157. consulted during startup, the default folder for files is the startup folder
  158. rather than the home folder.
  159. This facilitates automatic startup with multiple file consultation. 
  160.  
  161.  
  162. ╫ Using Open Prolog
  163.  
  164. It helps to visualise the system as having two distinct parts -
  165. the text editor and the Prolog interpreter.
  166.  
  167. ╫ Text Editor
  168.  
  169. Your interaction with Open Prolog is via the text editor. With it, you can do
  170. text editing things on the Worksheet, and on up to seven other files.
  171.  
  172. Facilities offered are standard text editor commands and functions.
  173.  
  174. Worth mentioning is 'Auto-indent' which, if enabled, works by copying all the spaces & tabs from the start of the previous line down to the start of this line.
  175. Holding down the Option key when typing Return will do the opposite of whatever is selected for auto-indent.
  176.  
  177. Also worth mentioning is the 'Search All Windows' in the Find and Replace menus:
  178. all windows will be searched, in front-to-back order, until a match is found. The window in which the match is found becomes the front window.
  179. Holding down the Shift key when selecting find or replace will reverse the search direction.
  180.  
  181. An open diamond - ╫ - appears opposite the name of the current front window
  182. in the Window menu. Underlining indicates that the window needs to be
  183. saved (either it's been changed, or it was never saved before).
  184.  
  185. The 'Display Selection' menu will scroll the caret or the selected text into
  186. view.
  187.  
  188. It's possible that Open Prolog won't allow you to open a window because it hasn't
  189. enough memory. To get around this, enter the built-in predicate 'gc'.
  190. This should free up some space for more windows.
  191.  
  192. NOTE: Suppose you open a file into a window, and then make changes to the
  193. contents of the window, and suppose you then consult or otherwise read the
  194. file, then what the system will see is the *file* contents, and *not*
  195. the window contents with the changes you may have made.
  196. To make sure that the changes you make in the window are seen when the
  197. file is read, you must save the changed window first - this makes the file
  198. contents match exactly what's in the window.
  199. For similar reasons, if you open a new window, Open Prolog can't 'see' it until it has been saved first.
  200. You can tell when a window needs to be saved - the Save menu item in the
  201. File menu will be black, not gray, and the window's name will be underlined
  202. in the Window menu.
  203. Finally, we realise that this is a pain in the neck, and we'll fix it someday.
  204.  
  205. í Window Characteristics
  206. When windows are opened, they are opened in the same location (assuming
  207. it's still visible), and with the same size as when they were last closed.
  208.  
  209. Likewise, font, font size and the position of the flashing caret or selection
  210. point are remembered from when the window was last used.
  211.  
  212. A window's maximum size if fixed according to the size of the
  213. printable page in the currently selected printer.
  214.  
  215.  
  216. í Locked Files
  217. If a file is locked, or its volume is locked or read only, you can use the
  218. window as normal, but you won't be allowed to save changes to that file.
  219. Locked files have a padlock icon in their window's status bar.
  220.  
  221. ╫ Worksheet
  222. Most of the transactions that occur between you and Open Prolog will be
  223. through a window.
  224.  
  225. Generally, you issue commands by typing them into a window and then
  226. notifying the interpreter about them using the ENTER key.
  227. Open Prolog writes replies into the same window.
  228.  
  229. You can use any window for sending commands and for getting replies,
  230. but the Worksheet will be chosen by default or if any errors occur
  231. when using another window.
  232.  
  233. The Worksheet can't be closed.
  234.  
  235. ╫ The ENTER Key
  236. While you are editing text, the Prolog interpreter is disconnected from
  237. what you are doing - it won't be 'listening'. To get its attention, you need
  238. to notify it in some way that what you're doing is not just text editing.
  239. That is the function of the ENTER key: all input from the text editor to the
  240. Prolog interpreter is denoted by selecting the text and typing the ENTER key.
  241. (This is similar to the arrangement in Apple's excellent MPW).
  242.  
  243. For example, below is the text of a command to consult the file 'benchmarks'.
  244. To input it to the interpreter,  select it (include the full stop) and
  245. type the ENTER key:
  246.  
  247. [benchmarks].
  248.  
  249. In practice, you don't always have to select the whole thing - if the text
  250. occupies only one line, position the caret anywhere along the line
  251. and press the ENTER key.
  252. The whole line will then be taken as the text. This is called
  253. 'single line selection'.
  254.  
  255. Remember also that you need to use the ENTER key to denote all input to the
  256. interpreter, not just command input. For example, if your program wants to
  257. read a term from the user, you must type or find the text, select it all,
  258. and press the ENTER key to tell the interpreter to take it as input.
  259.  
  260. For example, try evaluating the following query by single-line-selecting it.
  261. You'll need to provide a further input in response; again, you
  262. can use single line selection. Also, remember the full stop after
  263. the term:
  264.  
  265. write('Please enter a Prolog term: '),read(Term),write('It''s: '),write(Term).
  266.  
  267. As is normal on DEC Prolog, where variable bindings are given as part
  268. of the result of a query, the system waits for confirmation - type the
  269. ENTER key - or a request for a retry - type a semicolon and  the ENTER key.
  270.  
  271. ╫ Prompts
  272. The standard ?- prompt generally appears on the  'status bar'
  273. at the top of the front window.
  274. If you wish, you can enter a query preceded by a ?-  - it won't make any
  275. difference. If you precede your query by a :- then it will be performed
  276. without returning the variable bindings.
  277.  
  278. Examples:
  279. :- write(H),nl.
  280. ?- write(G).
  281.  
  282. ╫ Comment on ENTER & Prompts
  283. Using the ENTER key to denote input to the interpreter has many advantages,
  284. although it's probably a bit annoying to get used to.
  285. The principal advantage is that, since RETURN does not signify a command or anything special, you can do standard text editing freely and you can use any part of the Worksheet as a source of input.
  286. In other words, you can re-use text on the Worksheet over and over.
  287. (Some people have complained that there isn't an ENTER key of their
  288. machines. In fact, there is one on every machine. Sometimes it has a symbol
  289. like an arrowhead pointing upwards to meet a horizontal line.
  290. On compact keyboards it is usually the strange key to the right of the
  291. space bar.)
  292.  
  293. ╫ Verbose and Terse Answers
  294. Most Prologs answer a query with a 'yes' (after any variable bindings) or a 'no' depending on whether the query can be proved or not.
  295. Open Prolog defaults to this behaviour also - it gives a 'verbose' answer.
  296. If you wish, you can suppress the output of 'yes' and 'no'
  297. by changing the answering mode from verbose to terse. The built-in predicate
  298. to use is 'system$answer$mode'(CurrentAnswerMode,NewAnswerMode).
  299. Allowed arguments are 'terse' or 'verbose'.
  300. The following example determines the current answering mode without
  301. changing it:
  302.  
  303. 'system$answer$mode'(State,State).
  304.  
  305. ╫ Syntax Errors
  306. When Open Prolog tries to read a term - either as a result of your program,
  307. or of built-in predicates like consult - if it detects any errors, it will try to
  308. notify you in a useful way. An error message is written to the output window.
  309. The part of the error message that begins:
  310. :- 'Show Syntax Error'(╔ 
  311. has the form of a Prolog command, and can be used to call the
  312. 'Show Syntax Error' built-in predicate,
  313. which will try to open the file and show you where the error was.
  314. You use it by single-line-selecting it.
  315. Try it by consulting the file 'buggy syntax' which has a 
  316. deliberate error:
  317.  
  318. ['buggy syntax'].
  319.  
  320. If the file is already open under a different (window) name, or if the file is
  321. too big, the call will fail.
  322.  
  323. ╫ Activity During Evaluation
  324. During a long evaluation, it's possible to use the
  325. text editor in windows other than the current output window (the current
  326. output window is usually the Worksheet). The system will share
  327. the processor between the interpreter and the text editor.
  328. Generally, you won't notice the sharing being done.
  329. Occasionally, however, the interpreter will keep the processor
  330. for a few seconds to do garbage collection, or I/O.
  331. During that time the text editor will 'freeze' and won't respond to
  332. the keyboard or other user input.
  333. This is normal and is no cause for concern.
  334.  
  335. Please be careful to save your work frequently in this mode,
  336. because if the evaluation causes Open Prolog to crash, 
  337. your work may be lost. 
  338.  
  339. ╫ Stopping an Evaluation
  340. The standard 'Command-.' will halt a Prolog evaluation.
  341.  
  342. ╫ Background Operation
  343. Open Prolog is Multifinder 'friendly' and will run in the Multifinder 
  344. background. This may be useful for long evaluations. Running under System 7,
  345. it can be hidden and still be running.
  346.  
  347.  
  348. ╫ Operation on battery powered Macintoshes.
  349.  
  350. Open Prolog works fine on all battery powered Macintoshes.
  351.  
  352. One complication regarding battery powered Macs is that
  353. during periods of longer than about 15 seconds without any
  354. user interaction or cursor animation, the machine may go into 'rest' mode.
  355. In this mode, battery power is conserved by running about 15 times slower
  356. than normal.
  357.  
  358. Open Prolog spins a cursor during long evaluations to prevent resting.
  359. However, if you are text-editing during an evaluation, the cursor will be
  360. the I-beam, and it won't be animated; if you stop typing or moving the mouse
  361. for more than about 15 seconds, then the machine will rest.
  362.  
  363. ╫ Built-In Predicates
  364. To get a list of all predicates - normal, built-in and external,
  365. there follows a sequence of commands to perform.
  366. Select them all and hit the <ENTER> key:
  367.  
  368. 'system$predicate'(X,Y,Z),functor(Y,X,A),
  369. writeq(X),write('/'),write(A),write(.),write('   % '),write(Z),nl,fail.
  370.  
  371. Note: with a few exceptions, you should stay away from
  372. anything with a $ in it, or anything with the word 'system' in it - you
  373. may end up crashing the program.
  374.  
  375. The file 'Open Prolog Extras' has more information about some of
  376. the non-standard predicates.
  377.  
  378. ╫ Redefining Built-In Predicates
  379. Open Prolog complains if you try to redefine any built-ins or externals.
  380.  
  381. ╫ Arithmetic
  382. Arithmetic is standard 32-bit integer arithmetic. The following
  383. predefined functions are provided:
  384. unary minus: - 
  385. subtraction: - 
  386. addition: +
  387. multiplication: *
  388. integer division: / (also //)
  389. mod (remainder): mod
  390. absolute value: abs
  391. bitwise and: /\
  392. bitwise or: \/
  393. bitwise not: ~ (also \)
  394. bitwise leftshift: <<
  395. bitwise rightshift: >>
  396. maximum integer:  maxint
  397. minimum integer: minint
  398. time:  cputime
  399. The function 'cputime' gives the time in milliseconds since system startup
  400. with a short-term granularity of approximately 16 mS (one system 'tick').
  401. Use the built-in procedure 'system$seconds'(Seconds) for more
  402. accurate timing of long intervals.
  403.  
  404. ╫ Operators
  405. The standard DEC Prolog operator definitions are made at startup.
  406. You can get a list of operator definitions by evaluating the following query.
  407.  
  408. current_op(X,Y,Z),write(op(X,Y,Z)),write('.'),nl,fail.
  409.  
  410. ╫ Extended Character Set
  411. The full laser-printer character set (e.g. Times), which has more
  412. characters than the original standard character sets like Chicago,
  413. is assumed here.
  414.  
  415. Accented characters are treated as alphabetic, so atoms containing
  416. accented characters don't need to be put in quotes.
  417.  
  418. Thus the following is legal:
  419.  
  420. Xèvier = nùirÆn+jƒrgen+âcole+grÅve+da¢+ìedilla+forÉt.
  421.  
  422. ╫ Sorting
  423. Sorting is performed by the Mac's International Utilities, which
  424. should handle accented characters correctly.
  425.  
  426. Names are sorted lexically. Primary ordering of names ignores case and accent
  427. information; then case and accent data is used to order names that are
  428. identical under primary ordering.
  429.  
  430. ╫ Files
  431. The file-handling arrangements are essentially unchanged from DEC Prolog,
  432. except where obviously necessary. Some built-in predicates have been
  433. omitted, notably 'close/1' and 'fileErrors' & 'nofileerrors'.
  434.  
  435. ╫ File Naming
  436. File naming follows standard Macintosh practice. To specify a file in the
  437. home folder, just give its name (as 'benchmarks' above).
  438.  
  439. If it's in another folder, you can give its full pathname. For example, to 
  440. consult a file called 'Utilities' on a disk or volume called 'Open Prolog Disk'
  441. in a folder called 'Samples' you could use:
  442.  
  443. ['Open Prolog Disk:Samples:Utilities'].
  444.  
  445. Alternatively, you can specify a file by its partial pathname (i.e. the
  446. extra information needed to 'get from' the Home Folder to there).
  447. For instance, on this distribution you can use the following to consult
  448. the file 'Tak' in the folder 'Samples' which is in the Home Folder:
  449.  
  450. [':Samples:Tak'].
  451.  
  452. ╫ End of File & End of Line
  453. -    End of line & end of file treatment is the same as in DEC Prolog.
  454. -    When reading from a file, the last term is always 'end_of_file'.
  455. -    When get-ing or get0-ing from a file, the last character is code 26.
  456. .    Carriage Returns (ASCII code 13), generally signifying end-of-line in a file,
  457. are filtered out of the get or get0 stream and replaced by code 31.
  458.  
  459. Input from a window never results in an end of file condition.
  460.  
  461. ╫ nl
  462. -    nl outputs a Carriage Return (ASCII code 13).
  463.  
  464. ╫ get & get0
  465. -    get & get0 always return the next character, irrespective of whether it is
  466. 'printable' or not.
  467.  
  468. ╫ Debugging
  469. The main Program Debugging facility is the trace/1 predicate.
  470. You can trace the execution of a predicate by calling it via trace:
  471.  
  472. %assuming you've already consulted 'tak' above╔
  473.  
  474. trace(tak(12,8,4,N)).
  475.  
  476. The commands available are:
  477. <ENTER> - trace
  478. s<ENTER> - step over
  479. a<ENTER> - abort
  480. f<ENTER> - fail
  481. l<ENTER> - leap. Continue tracing silently until a spypoint is encountered.
  482. @<ENTER> - break for one command
  483.  
  484. Effective from version 1.0d36, you can place spypoints (a.k.a. breakpoints)
  485. on named predicates.
  486.  
  487. e.g.
  488.  
  489. spy(member).
  490.  
  491. will put a spypoint on all occurences of a member predicate.
  492.  
  493. nospy(append).
  494.  
  495. will remove spypoints from all occurences of append.
  496.  
  497. spying will list all spypoints in place.
  498.  
  499. The unknown/2 predicate specifies what happens when a call is made
  500. to an unknown predicate. (Allowable values are fail or trace.)
  501.  
  502. E.g., select:
  503.  
  504. unknown(X,trace).
  505.  
  506. This will set Open Prolog to abort when an unknown call is made.
  507.  
  508. Try it now by selecting:
  509.  
  510. huh(What).
  511.  
  512. A debugger giving access to the source code is under development.
  513.  
  514. ╫ System Error Messages:
  515. There are three kinds of error messages:
  516. A. A simple information box with 'OK' as the only option.
  517. B. A 'Diagnostic' or 'Breakpointer' information box.
  518. This is intended for giving debugging information, and if it turns up
  519. in normal operation it means that a special condition has occured. 
  520. C. Whenever Open Prolog detects a system error, it will warn you about it.
  521. You are generally given some information about the source and kind of the
  522. error. Naturally, it isn't always possible to predict what will happen
  523. if you continue operating the system.
  524.  
  525. Summarising: When you get an error message,
  526. if you are given a choice, it's best (initially) to exit.
  527. You normally get to save your files and windows, although sometimes
  528. the nature of the error causes more errors to be made as the files &
  529. windows are being saved. It that happens, you lose your fi╔
  530. Experience will tell what's best to do in a situation.
  531. (I sure hope you don't get a lot of that experience╔)
  532.  
  533. I'd appreciate you mailing me with the circumstances and nature of
  534. B & C type messages, and of undesirable effects of A type messages.
  535.  
  536. ╫ Problems with Open Prolog
  537. Here are the known significant difficulties with Open Prolog at the moment.
  538. There are simple workarounds for them all.
  539.  
  540. 1. The absolute maximum size of any file that can be seen in an Open Prolog
  541. window is limited to 32767 characters.
  542. This limit only applies to files that you want to open as windows.
  543. So, for example, if your program produces large output files, that's OK as
  544. long as you don't want to open them as windows from Open Prolog.
  545. Workarounds:
  546.  Break your files into smaller files.
  547.  Trim the Worksheet periodically so that is doesn't get too big.
  548.  To view and process larger text files, you'll need to use a text processor
  549. (MPW highly recommended) or word processor in text mode.
  550. Open Prolog tries to warn you about window contents exceeding 32767
  551. characters. Please don't rely on it too much-  when it warns you,
  552. it's often too late to do anything about it.
  553.  
  554. 2. Currently, the window system and the file system are not integrated.
  555. So, changes you make to a file in a window are not automatically
  556. reflected in the file when it is being consulted.
  557. Workaround - after making changes to a file in a window,
  558. save it before consulting or reconsulting it.
  559. (Actually, it's a good idea to save your work each time anyway╔)
  560. Likewise, a window must be closed before your program
  561. starts to output to it.
  562. Another difficulty is if you try to open a window & file using a predicate
  563. and the file is already open into a window of a different name; then the
  564. system will not recognise the already open window as the one it wants,
  565. and will refuse to open another.
  566.  
  567. 3. Tab characters are not properly represented or printed - instead a tab
  568. always occupies exactly one space. If you intend using your files with
  569. another text/word processor, then you should put them in╔
  570.  
  571. ╫ External Predicates
  572. External predicates are extra predicates written separately from Open Prolog, and 
  573. then 'dropped' in to Open Prolog using something like ResEdit. At present, an
  574. MPW Pascal interface is defined. It's possible to use SADE to debug external predicates that have been written using MPW.
  575. A THINK C interface is being developed by a number of users - for now, please contact me for details at brady@cs.tcd.ie.
  576. In this release, 'system$random', 'macintalk', 'play'  are external
  577. predicates. Likewise 'draw' is an external predicate (see separate documentation).
  578.